package String;

/**
 * 字符串
 */
public class StringDemo {
    public static void main(String[] args) {
        /*
        String 字面量
        String s = "";直接量复制，会重用常量池内的东西
        String s = new String(); new就会在堆中开辟空间，创建一个新对象，不会复用
         */
        String str = "123abc";
        System.out.println(str);
        String str2 = "123abc";
        System.out.println(str2);
        String str3 = new String("123abc");
        System.out.println(str3);
        String str4 = new String("123abc");
        System.out.println(str4);
        //字符串中比较是否相等，==判断的是地址值，
        // 引用类型中，若两个对象的地址值相同，那么他们指向的就是一个对象
        System.out.println(str == str2);//true,字面量的复用
        System.out.println(str == str3);//false
        System.out.println(str3 == str4);//false

        String s = "123";
        String s1 = s+"abc";
        System.out.println(str == s1);//false,地址不同,变量的拼接不会复用常量值中的123abc

        String s2 = "123"+"abc";
        System.out.println(str == s2);//true,字面量直接值，在拼接过程中会触发算法机制，复用池中的123abc

        /**
         * 字符串的比较，equals()比较的是内容，内容相同即为true
         */
        String s3 = "123abc";
        String s4 = new String("123abc");
        System.out.println(s3 == s4);//false 地址不同
        System.out.println(s3.equals(s4));//true equals()比较的是字面值，相同代表一样

    }
}
